package qc.module.ehs.service;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import qc.common.core.enums.EhsUnitStaticinfoTypeEnum;
import qc.common.core.exception.QCPromptException;
import qc.common.core.unify.QCUnifyReturnValue;
import qc.common.core.utils.IdentifierUtil;
import qc.module.ehs.dto.unitstaticinfo.EhsUnitStaticInfoDto;
import qc.module.ehs.entity.EhsUnitStaticinfo;
import qc.module.ehs.mapper.EhsUnitStaticInfoMapper;
import qc.module.ehs.repository.EhsUnitStaticInfoRepository;

import java.util.List;
import java.util.Objects;

/**
 * 单元静态信息接口Service
 *
 * @author QuCheng Tech
 * @create 2024/8/14
 */
@Service
public class EhsUnitStaticInfoService {

    @Autowired
    private EhsUnitStaticInfoRepository repository;

    @Autowired
    private EhsUnitInfoService unitBasicService;

    /**
     * 获取指定单元的静态信息列表
     *
     * @param unitid 单元ID
     * @return List<EhsUnitStaticInfoDto>
     * @author QuCheng Tech
     * @since 2024/8/14
     */
    public List<EhsUnitStaticInfoDto> getByUnitid(String unitid) throws QCPromptException {
        if (StringUtils.isBlank(unitid)) throw new QCPromptException("单元ID不能为空");
        if (!unitBasicService.isExist(unitid)) throw new QCPromptException("单元ID信息不存在");

        LambdaQueryWrapper<EhsUnitStaticinfo> wrapper = new LambdaQueryWrapper<>();
        wrapper.eq(EhsUnitStaticinfo::getUnitid, unitid);
        wrapper.orderByAsc(EhsUnitStaticinfo::getOdr);
        List<EhsUnitStaticinfo> ens = repository.selectList(wrapper);

        if (CollectionUtils.isNotEmpty(ens))
            return EhsUnitStaticInfoMapper.MAPPER.toDtoList(ens);
        return null;
    }

    /**
     * 获取指定静态信息
     *
     * @param id 静态信息ID
     * @return EhsUnitStaticInfoDto
     * @author QuCheng Tech
     * @since 2024/8/14
     */
    public EhsUnitStaticInfoDto get(String id) throws QCPromptException {
        if (StringUtils.isBlank(id)) throw new QCPromptException("静态信息ID不能为空");

        EhsUnitStaticinfo en = repository.selectById(id);
        if (Objects.nonNull(en)) return EhsUnitStaticInfoMapper.MAPPER.toDto(en);
        return null;
    }

    /**
     * 新增单元静态信息
     *
     * @param dto
     * @return 成功返回null，失败返回错误或提示信息
     * @author QuCheng Tech
     * @since 2024/8/14
     */
    public String add(EhsUnitStaticInfoDto dto) {
        if (dto == null) return QCUnifyReturnValue.Warn("新增对象不能为空");
        if (StringUtils.isBlank(dto.getUnitid())) return QCUnifyReturnValue.Warn("单元ID不能为空");
        if (dto.getInfotype() < EhsUnitStaticinfoTypeEnum.CHARACTERS.getIndex()
                || dto.getInfotype() > EhsUnitStaticinfoTypeEnum.PANORAMA.getIndex())
            return QCUnifyReturnValue.Warn("信息类型不能为空");
        if (StringUtils.isBlank(dto.getTitle())) return QCUnifyReturnValue.Warn("信息标题不能为空");
        if (StringUtils.isBlank(dto.getContent())) return QCUnifyReturnValue.Warn("信息内容不能为空");

        if (!unitBasicService.isExist(dto.getUnitid())) return QCUnifyReturnValue.Warn("单元ID信息不存在");

        EhsUnitStaticinfo en = EhsUnitStaticInfoMapper.MAPPER.dtoToEntity(dto);
        en.setId(IdentifierUtil.randomUUID());

        if (repository.insert(en) < 0x1) return QCUnifyReturnValue.Warn("保存失败");
        return QCUnifyReturnValue.Success();
    }

    /**
     * 修改单元静态信息
     *
     * @param dto
     * @return 成功返回null，失败返回错误或提示信息
     * @author QuCheng Tech
     * @since 2024/8/14
     */
    public String update(EhsUnitStaticInfoDto dto) {
        if (dto == null) return QCUnifyReturnValue.Warn("修改对象不能为空");
        if (StringUtils.isBlank(dto.getId())) return QCUnifyReturnValue.Warn("静态信息ID不能为空");
        if (StringUtils.isBlank(dto.getUnitid())) return QCUnifyReturnValue.Warn("单元ID不能为空");
        if (dto.getInfotype() < EhsUnitStaticinfoTypeEnum.CHARACTERS.getIndex()
                || dto.getInfotype() > EhsUnitStaticinfoTypeEnum.PANORAMA.getIndex())
            return QCUnifyReturnValue.Warn("信息类型不能为空");
        if (StringUtils.isBlank(dto.getTitle())) return QCUnifyReturnValue.Warn("信息标题不能为空");
        if (StringUtils.isBlank(dto.getContent())) return QCUnifyReturnValue.Warn("信息内容不能为空");

        if (!unitBasicService.isExist(dto.getUnitid())) return QCUnifyReturnValue.Warn("单元ID信息不存在");

        EhsUnitStaticinfo en = EhsUnitStaticInfoMapper.MAPPER.dtoToEntity(dto);

        repository.updateById(en);
        return QCUnifyReturnValue.Success();
    }

    /**
     * 删除指定静态信息
     *
     * @param id 静态信息ID
     * @return 成功返回null，失败返回错误或提示信息
     * @author QuCheng Tech
     * @since 2024/8/14
     */
    public String delete(String id) {
        if (StringUtils.isBlank(id)) return QCUnifyReturnValue.Warn("静态信息ID不能为空");

        repository.deleteById(id);
        return QCUnifyReturnValue.Success();
    }
}
